package com.skiving.cloud.admin.service;

import com.mybatisflex.core.paginate.Page;
import com.skiving.cloud.admin.vo.AdminRouteVue;
import com.skiving.cloud.auth.entity.AuthUser;
import com.skiving.cloud.auth.entity.UserQueryParameter;
import com.skiving.cloud.common.utils.PageParameter;
import com.mybatisflex.core.service.IService;
import com.skiving.cloud.admin.entity.SysUser;

import java.util.List;
import java.util.Map;

/**
 * 系统用户 服务层。
 *
 * @author skivingcloud
 * @since 2025-03-08
 */
public interface SysUserService extends IService<SysUser> {
    /**
     * 分页查询系统用户
     *
     * @param parameter 查询参数
     * @return 分页查询结果
     */
    Page<SysUser> queryByPage(PageParameter<SysUser> parameter);

    /**
     * 加载用户的菜单
     * @param id 用户
     * @param terminal 终端AdminConstant.TerminalType
     * @return 菜单
     */
    List<AdminRouteVue> getAllMenuForUserVue(String id, String terminal);

    /**
     * 接口权限
     * @param id 用户id
     * @return 权限列表
     */
    List<String> getUserPermissions(String id);

    /**
     * 返回指定账号id所拥有的角色标识集合
     * @param loginId 用户id
     * @return 角色列表
     */
    List<String> getUserRoles(String loginId);

    /**
     * 设置用户角色
     * @param sysUser 用户角色信息
     */
    void setUserRolesByUserId(SysUser sysUser);

    /**
     * 设置用户岗位
     * @param sysUser 用户岗位信息
     */
    void setUserStationsByUserId(SysUser sysUser);

    /**
     * 设置用户资源
     * @param sysUser 用户资源信息
     */
    void setUserMenuByUserId(SysUser sysUser);

    /**
     * 获取用户信息，包含机构名称
     * @param id 用户id
     */
    SysUser getUserIncludeById(String id);

    /**
     * 根据岗位ID和用户ID查询用户姓名
     * @param parameter 参数
     * @return 逗号隔开的用户姓名
     */
    String getUserNameByStationIdsAndUserIds(UserQueryParameter parameter);

    /**
     * 获取本租户下用户信息{key，value}
     * @param currentUser 用户
     * @return 用户信息
     */
    List<Map<String, Object>> getAllUserBySelfTenant(AuthUser currentUser);

    /**
     * 获取本租户下用户ID
     * @param currentUser 用户
     * @return 用户ID
     */
    List<String> getAllUserIdsBySelfTenant(AuthUser currentUser);
}
